package net.lengwang.iot.middleware.packet.response;

import net.lengwang.iot.middleware.packet.ParsedPacket;
import java.time.LocalDateTime;


// 2.2.2服务器授时反馈示例：（服务器→网关）

// | EB EB 0E 91 01 01 A2 11 11 11 11 17 09 12 11 36 58 00 00 BE BE |
// | --- |

// | 起始位置 (10进制) | 内容 (16进制) | 含义 | 备注 |
// | --- | --- | --- | --- |
// | 01 | EB EB | 起始位 | 固定值 |
// | 03 | 0E | 总长度 | 固定值 |
// | 04 | 91 | 命令 | 固定值 |
// | 05 | 01 | 协议版本 | 对应收到的版本 |
// | 06 | 01 A2 | 序列号 | 每次传输，此序列号递增，最大65535，达到最大值后从1开始。 |
// | 08 | 11 11 11 11 | GW ID | 网关编号 |
// | 12 | 17 09 12 11 36 58 | 服务器传输时间 | 服务器时间，BCD码，格式：“17年09月12日11时26分58秒”。 |
// | 18 | 00 00 | CRC16 | 设为00 00可以屏蔽CRC16校验的功能。 |
// | 20 | BE BE | 结束位 | 固定值 |

public class TimeSyncResponsePacket extends ResponsePacket {

    private ParsedPacket parsedPacket;
    protected byte COMMAND = (byte) 0x91;
    protected byte PACKET_LENGTH = (byte) 0x0E;

    public TimeSyncResponsePacket(ParsedPacket parsedPacket) {
        super(parsedPacket);
        this.parsedPacket = parsedPacket;
    }

    @Override
    public byte[] toByteArray() {
        byte[] packet = new byte[21]; // 修改为21字节长度

        // 起始标志位
        packet[0] = (byte) ResponsePacket.START_FLAG;
        packet[1] = (byte) ResponsePacket.START_FLAG;

        // 数据包总长度
        packet[2] = this.PACKET_LENGTH;

        // 命令位 (0x91 表示授时命令)
        packet[3] = this.COMMAND;

        // 协议版本
        packet[4] = Byte.parseByte(this.parsedPacket.getByte(4));

        // 序列号
        packet[5] = (byte) Integer.parseInt(this.parsedPacket.getSequenceNumber().substring(0, 2), 16);
        packet[6] = (byte) Integer.parseInt(this.parsedPacket.getSequenceNumber().substring(2, 4), 16);

        // 网关ID (4字节) = gatewayId
        String gatewayId = this.parsedPacket.getGatewayId();
        System.out.println("gatewayId: " + gatewayId);
        packet[7] = (byte) Integer.parseInt(gatewayId.substring(0, 2), 16);
        packet[8] = (byte) Integer.parseInt(gatewayId.substring(2, 4), 16);
        packet[9] = (byte) Integer.parseInt(gatewayId.substring(4, 6), 16);
        packet[10] = (byte) Integer.parseInt(gatewayId.substring(6, 8), 16);
    
        // 服务器时间 (6字节，BCD格式)
        super.setServerTime(packet, 11, super.createServerTime());

        // CRC16
        packet[17] = (byte) ResponsePacket.CRC16[0];
        packet[18] = (byte) ResponsePacket.CRC16[1];

        // 结束标志位
        packet[19] = (byte) ResponsePacket.END_FLAG;
        packet[20] = (byte) ResponsePacket.END_FLAG;

        return packet;
    }

}
